package pruebas;

import junit.framework.TestCase;
import java.util.ArrayList;

import juego.AvionCivil;
import juego.Avioneta;
import juego.Bombardero;
import juego.Coordenada;
import juego.Coordinador;
import juego.ExcepcionMuerto;
import juego.ExcepcionPuntajeAlcanzado;
import juego.Explorador;
import juego.FormacionCazas;
import juego.Helicoptero;
import juego.Laser;
import juego.Movil;
import juego.Proyectil;
import juego.Torpedo;
import juego.Tripulado;

public class TestCoordinador extends TestCase {
	
	public void testMurio(){
		
		Tripulado tripulado = new Tripulado();
		Coordinador coordinador = new Coordinador(tripulado);
		assertFalse(coordinador.murio());
		Coordenada ubicacionLaser = new Coordenada(170,345);
		Proyectil laser = new Laser(ubicacionLaser);
		coordinador.agregarMovil(laser);
		coordinador.agregarMovil(new Bombardero(160,350));
		coordinador.agregarMovil(new Torpedo(new Coordenada(175,350)));
		assertFalse(coordinador.murio());
		
		try {
			coordinador.vivir();
			assertTrue(true);
		} catch (ExcepcionMuerto e) {
			assertTrue(false);
		}
		
		assertTrue(coordinador.murio());
		try {
			coordinador.vivir();
			assertTrue(false);
		} catch (ExcepcionMuerto e) {
			assertTrue(true);
		}
	}

	
	public void testPuntajeAlcanzado(){
		Tripulado tripulado = new Tripulado();
		Coordinador coordinador = new Coordinador(tripulado);
		assertFalse(coordinador.puntajeAlcanzado());
		try {
			coordinador.vivir();
			assertTrue(true);
		} catch (ExcepcionPuntajeAlcanzado e) {
			assertTrue(false);
		}
		assertEquals(0,coordinador.verPuntaje());
			

		
		Torpedo torpedo = new Torpedo(new Coordenada(0,10));
		torpedo.hacerLeal();
		coordinador.agregarMovil(torpedo);
		Explorador explorador = new Explorador(0,0);
		coordinador.agregarMovil(explorador);
		try {
			coordinador.vivir();
			assertTrue(true);
		} catch (ExcepcionPuntajeAlcanzado e) {
			assertTrue(false);
		}
		assertEquals(50,coordinador.verPuntaje());
		assertFalse(torpedo.estaVivo());
		assertFalse(explorador.estaVivo());
		assertFalse(coordinador.puntajeAlcanzado());
		
		for (int i = 0; i < 19; i++){
			Torpedo otroTorpedo = new Torpedo(new Coordenada(0,10));
			otroTorpedo.hacerLeal();
			coordinador.agregarMovil(otroTorpedo);
			Explorador otroExplorador = new Explorador(0,0);
			coordinador.agregarMovil(otroExplorador);
			try {
				coordinador.vivir();
				assertTrue(true);
			}
			catch (ExcepcionPuntajeAlcanzado e) {
				assertTrue(false);
			}
		}
		assertEquals(1000,coordinador.verPuntaje());
		assertTrue(coordinador.puntajeAlcanzado());
		
		try {
			coordinador.vivir();
			assertTrue(false);
		}
		catch (ExcepcionPuntajeAlcanzado e) {
			assertTrue(true);
		}
		
	}

//	
//	public void testFlota(){
//		ArrayList<Movil> unaFlota = new ArrayList<Movil>();
//		Coordenada coord1 = new Coordenada(-10,80);
//		Bombardero unBombardero = new Bombardero(coord1);
//		unaFlota.add(unBombardero);
//		Coordinador coordinador = new Coordinador(unaFlota);
//		Movil unAlgo42 = (unaFlota.get(0));
//		try {
//			coordinador.jugar(0);
//			assertTrue (true);
//		}
//		catch(ExcepcionMuerto e){
//			assertTrue (false);
//		}
//		
//		Coordenada coord2 = unAlgo42.verUbicacion();
//		int x2 = coord2.obtenerCoordenadaX();
//		int y2 = coord2.obtenerCoordenadaY();
//		assertTrue(x2 == (10));
//		assertTrue(y2 == (15));
//		
//		Coordenada coord3 = unBombardero.verUbicacion();
//		int x3 = coord3.obtenerCoordenadaX();
//		int y3 = coord3.obtenerCoordenadaY();
//		assertTrue(x3 == (-5));
//		assertTrue(y3 == (75));
//		
//		for (int i = 1; i <= 3; i++){
//			try {
//				coordinador.jugar(0);
//				assertTrue (true);
//			}
//			catch(ExcepcionMuerto e){
//				assertTrue (false);
//			}
//		}
//		
//		assertFalse(unAlgo42.estaVivo());
//		assertFalse(unBombardero.estaVivo());
//		assertTrue(coordinador.murio());
//		assertFalse(coordinador.puntajeAlcanzado());
//	}
//	
//	public void testFlota2(){
//		ArrayList<Movil> unaFlota = new ArrayList<Movil>();
//		
//		Coordenada coord1 = new Coordenada(5,85);
//		Bombardero unBombardero1 = new Bombardero(coord1);
//		Coordenada coord2 = new Coordenada(-15,85);
//		Bombardero unBombardero2 = new Bombardero(coord2);
//		unaFlota.add(unBombardero1);
//		unaFlota.add(unBombardero2);
//		Coordinador coordinador = new Coordinador(unaFlota);
//		Movil unAlgo42 = (unaFlota.get(0));
//		
//		for (int i = 1; i <= 4; i++){
//			try {
//				coordinador.jugar(0);
//				assertTrue (true);
//			}
//			catch(ExcepcionMuerto e){
//				assertTrue (false);
//			}
//		}
//		
//		assertFalse(unAlgo42.estaVivo());
//	}	
//	
//	public void testFlota3(){
//		ArrayList<Movil> unaFlota = new ArrayList<Movil>();
//		FormacionCazas unaFormDeCazas = new FormacionCazas(50,50,unaFlota);
//	
//		for (int i = 1; i <= 5; i++){
//			Coordenada coord1 = new Coordenada(-10,50);
//			Explorador unExplorador = new Explorador(coord1);
//			unaFlota.add(unExplorador);
//		}
//	
//		for (int i = 1; i <= 5; i++){
//			Coordenada coord1 = new Coordenada(10,50);
//			Explorador unExplorador = new Explorador(coord1);
//			unaFlota.add(unExplorador);
//		}
//	
//		for (int i = 1; i <= 5; i++){
//			Coordenada coord1 = new Coordenada(-5,50);
//			Explorador unExplorador = new Explorador(coord1);
//			unaFlota.add(unExplorador);
//		}
//	
//		for (int i = 1; i <= 5; i++){
//			Coordenada coord1 = new Coordenada(5,50);
//			Explorador unExplorador = new Explorador(coord1);
//			unaFlota.add(unExplorador);
//		}
//	
//		Coordinador coordinador = new Coordinador(unaFlota);
//		Movil unAlgo42 = (unaFlota.get(0));
//		
//		for (int i = 1; i <= 6; i++){
//			try {
//				coordinador.jugar((Math.PI)/2);
//				assertTrue (true);
//			}
//			catch(ExcepcionMuerto e){
//				assertTrue (true);
//			}
//			try {
//				coordinador.jugar(3*((Math.PI)/2));
//				assertTrue (true);
//			}
//			catch(ExcepcionMuerto e){
//				assertTrue (true);
//			}
//		} 
//		//
//		
//		assertFalse(unAlgo42.estaVivo());
//		assertTrue(coordinador.murio());
//	}
//	
//	public void testFlota4(){
//		ArrayList<Movil> unaFlota = new ArrayList<Movil>();
//		FormacionCazas unaFormDeCazas = new FormacionCazas(50,50,unaFlota);
//		
//		for (int i = 1; i <= 5; i++){
//			Coordenada coord1 = new Coordenada(-10,40);
//			Explorador unExplorador = new Explorador(coord1);
//			unaFlota.add(unExplorador);
//		}
//		
//		for (int i = 1; i <= 5; i++){
//			Coordenada coord1 = new Coordenada(10,40);
//			Explorador unExplorador = new Explorador(coord1);
//			unaFlota.add(unExplorador);
//		}
//		
//		for (int i = 1; i <= 5; i++){
//			Coordenada coord1 = new Coordenada(-5,40);
//			Explorador unExplorador = new Explorador(coord1);
//			unaFlota.add(unExplorador);
//		}
//		
//		for (int i = 1; i <= 5; i++){
//			Coordenada coord1 = new Coordenada(5,40);
//			Explorador unExplorador = new Explorador(coord1);
//			unaFlota.add(unExplorador);
//		}
//		
//		assertEquals(25,unaFlota.size());
//		Coordinador coordinador = new Coordinador(unaFlota);
//		assertEquals(26,unaFlota.size());
//		Movil unAlgo42 = (unaFlota.get(0));
//		
//		for (int i = 1; i <= 4; i++){
//			try {
//				coordinador.jugar((Math.PI)/2);
//				assertTrue (true);
//			}
//			catch(ExcepcionMuerto e){
//				assertTrue (false);
//			}
//			try {
//				coordinador.jugar(3*((Math.PI)/2));
//				assertTrue (true);
//			}
//			catch(ExcepcionMuerto e){
//				assertTrue (true);
//			}
//		}
//		
//		assertFalse(unaFlota.contains(unAlgo42));
//		assertFalse(coordinador.puntajeAlcanzado());
//		assertTrue(coordinador.murio());
//		assertFalse(unAlgo42.estaVivo());
//	
//	}	
//	
//
//
//	public void testFlota5(){
//		ArrayList<Movil> unaFlota = new ArrayList<Movil>();
//		FormacionCazas unaFormDeCazas = new FormacionCazas(50,50,unaFlota);
//		
//		Coordenada coord1 = new Coordenada(5,40);
//		Explorador unExplorador = new Explorador(coord1);
//		unaFlota.add(unExplorador);
//		
//		Coordenada coord2 = new Coordenada(0,50);
//		Bombardero unBombardero = new Bombardero(coord2);
//		unaFlota.add(unBombardero);
//		
//		Coordenada coord3 = new Coordenada(-20,60);
//		Avioneta unaAvioneta = new Avioneta(coord3);
//		unaFlota.add(unaAvioneta);
//		
//		AvionCivil unAvionCivil = new AvionCivil(-15,30);
//		unaFlota.add(unAvionCivil);
//		
//		Helicoptero unHelicoptero = new Helicoptero(0,40);
//		unaFlota.add(unHelicoptero);
//		
//		assertEquals(10,unaFlota.size());
//		
//		Coordinador unCoordinador = new Coordinador(unaFlota);
//		Movil unAlgo42 = (unaFlota.get(0));
//		
//		for (int i = 1; i <= 4; i++){
//			try {
//				unCoordinador.jugar((Math.PI)/2);
//				assertTrue (true);
//			}
//			catch(ExcepcionMuerto e){
//				assertTrue (false);
//			}
//			try {
//				unCoordinador.jugar(3*((Math.PI)/2));
//				assertTrue (true);
//			}
//			catch(ExcepcionMuerto e){
//				assertTrue (true);
//			}
//		}
//		
//		assertFalse(unCoordinador.puntajeAlcanzado());
//		assertFalse(unAlgo42.estaVivo());
//		assertTrue(unCoordinador.murio());
//	}
//	
}


